/**
 * Created with IntelliJ IDEA.
 * Description:
 * https://gitee.com/li--jiaqiang/java-test.git
 * git pull
 * git pull origin master
 * git pull origin master --allow-unrelated-histories
 * User: 86187
 * Date: 2022-04-24
 * Time: 22:42
 */

//Scanner scan = new Scanner(System.in);


public class TestDemo4 {
    /**
     *给你一个数组 nums和一个值 val，你需要 原地 移除所有数值等于val的元素，并返回移除后数组的新长度。
     * 不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
     * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
     * 链接：https://leetcode-cn.com/problems/remove-element
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     *
     * 示例 2：
     * 输入：nums = [0,1,2,2,3,0,4,2], val = 2
     * 输出：5, nums = [0,1,4,0,3]
     * 解释：函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
     *      注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement(int[] nums,int val) {
        if(nums == null) {
            return 0;
        }

        int p = 0;
        int q = 0;

        while(q < nums.length) {
            if(nums[q] != val) {
                nums[p] = nums[q];
                p++;
            }
            q++;
        }
        return p;
    }

    /**
     * 打印的方法
     * @param array
     * @param length
     */
    public static void pointNum(int[] array,int length) {
        if(array == null || length == 0) {
            return;
        }
        System.out.print("[");
        for (int i = 0; i < length; i++) {
            if(i != length-1){
                System.out.print(array[i]+",");
            } else {
                System.out.print(array[i]);
            }

        }
        System.out.print("]");
    }

    public static void main(String[] args) {
        int[] array = {0,2,1,2,5,6,9,2};

        int newLength = removeElement(array, 2);

        pointNum(array,newLength);
    }
}
